/**
 * 
 */
package NoteBook;

/**
 * String四种构造方法
 * 1.public String();  创建空字符串对象
 * 2.public String (char [] chs);  根据字符数组内容，创建字符串对象（''单字符）
 * 3.public String (byte [] bys);  根据字节数组内容，创建字符串对象（整数->字符）97-a   
 * 4.String s="abc";   直接赋值创建字符串对象
 * 
 * String 与数组的不同
 *String:  .length()
 *数组：    .length
 * @author Jiang Zhiyan
 *
 * 2021年5月18日 下午2:53:50
 */
public class _05String的构造方法和equals {
    public static void main(String[] args) {
    	String str = new String();
    	System.out.println("空字符串对象"+str+".");//  是的，啥也没有
//		构造方法得到对象
    	char [] chs= {'a','b','c'};
    	String s1=new String (chs);
    	String s2=new String (chs);
    	System.out.println(s1+" "+s2); //abc abc
    	
//    	65--A;97--a;48--0
    	byte [] byt= {97,98,99};
    	String str1=new String(byt);
    	String str2=new String(byt);
    	System.out.println(str1+" "+str2); //abc abc  整数类型自动转换成字符串类型
    	
//    	直接赋值得到对象
    	String s3="abc";
    	String s4="abc";
    	
    	/**
    	 * 双引号直接写的字符串在常量池中，new的不在池中（但都在堆中）：
    	 * 1.用new创建的字符串对象，每new一次都会申请一个内存空间，
    	 * 虽然内容相同，但是地址不同。
    	 * 2.用""给出的字符串，只要其序列相同（顺序和大小写），
    	 * 无论在程序中出现几次，都只会建立一个String对象，并在堆中的常量池中
    	 * 其内容相同，地址也相同。 
    	 * 
    	 */      	
//    	 比较字符串对象地址是否相同
    	System.out.println("s1==s2:"+(s1==s2));  //s1==s2:false
    	System.out.println("s1==s3:"+(s1==s3));  //s1==s3:false
    	System.out.println("s3==s4:"+(s3==s4));  //s3==s4:true   	
    	System.out.println("----------");
    	
//    	比较字符串内容是否相同
    	System.out.println(s1.equals(s2));  //true
    	System.out.println(s1.equals(s3));  //true
    	System.out.println(s3.equals(s4));  //true
	}
}
